Next: Key Bindings, Up: Customization [Contents][Index]
An easy way to customize Viper is to change the values of
constants used in Viper. Here is the list of the constants used
in Viper and their default values. The corresponding :se command
is also indicated. (The symbols t and
nil represent “true” and
“false” in Lisp).
Viper supports both the abbreviated Vi variable names and their full names. Variable completion is done on full names only. TAB and SPC complete variable names. Typing = will complete the name and then will prompt for a value, if applicable. For instance, :se au SPC will complete the command to :set autoindent; :se ta SPC will complete the command and prompt further like this: :set tabstop = . However, typing :se ts SPC will produce a “No match” message because ts is an abbreviation for tabstop and Viper supports completion on full names only. However, you can still hit RET or =, which will complete the command like this: :set ts = and Viper will be waiting for you to type a value for the tabstop variable. To get the full list of Vi variables, type :se SPC TAB.
viper-auto-indent nil:se ai (:se autoindent):se ai-g (:se autoindent-global)If t, enable auto indentation. by RET, o or O command.
viper-auto-indent is a local variable. To
change the value globally, use setq-default. It
may be useful for certain major modes to have their own
values of viper-auto-indent. This can be
achieved by using setq to change the local value
of this variable in the hooks to the appropriate major
modes.
:se ai changes the value of
viper-auto-indent in the current buffer only;
:se ai-g does the same globally.
viper-electric-mode tIf not nil, auto-indentation becomes
electric, which means that RET,
O, and o indent cursor according to the
current major mode. In the future, this variable may control
additional electric features.
This is a local variable: setq changes the
value of this variable in the current buffer only. Use
setq-default to change the value in all
buffers.
viper-case-fold-search nil:se ic (:se ignorecase)If not nil, search ignores cases. This can
also be toggled by quickly hitting / twice.
viper-re-search nil:se magicIf not nil, search will use regular
expressions; if nil then use vanilla search.
This behavior can also be toggled by quickly hitting
/ trice.
buffer-read-only:se ro (:se readonly)Set current buffer to read only. To change globally put
(setq-default buffer-read-only t) in your
.emacs file.
blink-matching-paren t:se sm (:se showmatch)Show matching parens by blinking cursor.
tab-width t (default setting via
setq-default):se ts=value (:se tabstop=value):se ts-g=value (:se tabstop-global=value)tab-width is a local variable that controls
the width of the tab stops. To change the value globally, use
setq-default; for local settings, use
setq.
The command :se ts sets the tab width in the current buffer only; it has no effect on other buffers.
The command :se ts-g sets tab width globally, for all buffers where the tab is not yet set locally, including the new buffers.
Note that typing TAB normally
doesn’t insert the tab, since this key is usually bound
to a text-formatting function,
indent-for-tab-command (which facilitates
programming and document writing). Instead, the tab is
inserted via the command viper-insert-tab, which
is bound to S-tab (shift + tab).
On some non-windowing terminals, Shift doesn’t
modify the TAB key, so S-tab
behaves as if it were TAB. In such a
case, you will have to bind viper-insert-tab to
some other convenient key.
viper-shift-width 8:se sw=value (:se shiftwidth=value)The number of columns shifted by > and < commands.
viper-search-wrap-around t:se ws (:se wrapscan)If not nil, search wraps around the
end/beginning of buffer.
viper-search-scroll-threshold 2If search lands within this many lines of the window top or bottom, the window will be scrolled up or down by about 1/7-th of its size, to reveal the context. If the value is negative, don’t scroll.
viper-tags-file-name "TAGS"The name of the file used as the tag table.
viper-re-query-replace nilIf not nil, use reg-exp replace in query
replace.
viper-want-ctl-h-help nilIf not nil, C-h is bound to
help-command; otherwise, C-h is bound
as usual in Vi.
viper-vi-style-in-minibuffer tIf not nil, Viper provides a high degree of
compatibility with Vi insert mode when you type text in the
minibuffer; if nil, typing in the minibuffer
feels like plain Emacs.
viper-no-multiple-ESC tIf you set this to nil, you can use
ESC as Meta in Vi state. Normally, this
is not necessary, since graphical displays have separate Meta
keys (usually on each side of the space bar). On a dumb
terminal, Viper sets this variable to twice,
which is almost like nil, except that double
ESC beeps. This, too, lets ESC to be used as a Meta.
viper-fast-keyseq-timeout 200Key sequences separated by this many milliseconds are treated as Vi-style keyboard macros. If the key sequence is defined as such a macro, it will be executed. Otherwise, it is processed as an ordinary sequence of typed keys.
Setting this variable too high may slow down your typing. Setting it too low may make it hard to type macros quickly enough.
viper-ex-style-motion tSet this to nil, if you want l,h
to cross lines, etc. See Movement and
Markers, for more info.
viper-ex-style-editing tSet this to nil, if you want C-h
and DEL to not stop at the beginning of
a line in Insert state, X and x to delete characters across lines in Vi command
state, etc.
viper-ESC-moves-cursor-back tIt t, cursor moves back 1 character when
switching from insert state to vi state. If nil,
the cursor stays where it was before the switch.
viper-always tt means: leave it to Viper to decide when a
buffer must be brought up in Vi state, Insert state, or Emacs
state. This heuristics works well in virtually all cases.
nil means you either has to invoke
viper-mode manually for each buffer (or you can
add viper-mode to the appropriate major mode
hooks using viper-load-hook).
This option must be set in your Viper customization file.
viper-custom-file-name "~/.emacs.d/viper"File used for Viper-specific customization. Change this setting, if you want. Must be set in .emacs before Viper is loaded. Note that you have to set it as a string inside double quotes.
viper-spell-function 'ispell-regionFunction used by the command #c<move> to spell.
viper-glob-functionThe value of this variable is the function symbol used to
expand wildcard symbols. This is platform-dependent. The
default tries to set this variable to work with most shells,
MS Windows, OS/2, etc. However, if it doesn’t work the
way you expect, you should write your own. Use
viper-glob-unix-files and
viper-glob-mswindows-files in
viper-util.el as examples.
This feature is used to expand wildcards in the Ex command :e. Note that Viper doesn’t support wildcards in the :r and :w commands, because file completion is a better mechanism.
ex-cycle-other-window tIf not nil, :n and :b
will cycle through files in another window, if one
exists.
ex-cycle-through-non-files nil:n does not normally cycle through buffers. Set this to get buffers also.
viper-want-emacs-keys-in-insertThis is set to nil for user levels 1 and 2
and to t for user levels 3 and 4. Users who
specify level 5 are allowed to set this variable as they
please (the default for this level is t). If set
to nil, complete Vi compatibility is provided in
Insert state. This is really not recommended, as this
precludes you from using language-specific features provided
by the major modes.
viper-want-emacs-keys-in-viThis is set to nil for user level 1 and to
t for user levels 2–4. At level 5, users
are allowed to set this variable as they please (the default
for this level is t). If set to
nil, complete Vi compatibility is provided in Vi
command state. Setting this to nil is really a
bad idea, unless you are a novice, as this precludes the use
of language-specific features provided by the major
modes.
viper-keep-point-on-repeat tIf not nil, point is not moved when the user
repeats the previous command by typing a period. This is very
useful for doing repeated changes with the .
key.
viper-repeat-from-history-key 'f12Prefix key used to invoke the macros f12 1 and
f12 2 that repeat the second-last and the
third-last destructive command. Both these macros are bound
(as Viper macros) to viper-repeat-from-history,
which checks the second key by which it is invoked to see
which of the previous commands to invoke. Viper binds
f12 1 and f12 2 only, but the user can
bind more in his/her Viper customization file. See Vi Macros, for how to do
this.
viper-keep-point-on-undo nilIf not nil, Viper tries to not move point
when undoing commands. Instead, it will briefly move the
cursor to the place where change has taken place. However, if
the undone piece of text is not seen in window, then point
will be moved to the place where the change took place. Set
it to t and see if you like it better.
viper-delete-backwards-in-replace nilIf not nil, DEL key will
delete characters while moving the cursor backwards. If
nil, the cursor will move backwards without
deleting anything.
viper-replace-overlay-face
'viper-replace-overlay-faceOn a graphical display, Viper highlights replacement regions instead of putting a ‘$’ at the end. This variable controls the so called face used to highlight the region.
By default, viper-replace-overlay-face
underlines the replacement on monochrome displays and also
lays a stipple over them. On color displays, replacement
regions are highlighted with color.
If you know something about Emacs faces and don’t
like how Viper highlights replacement regions, you can change
viper-replace-overlay-face by specifying a new
face. (Emacs faces are described in the Emacs Lisp
reference.) On a color display, the following customization
method is usually most effective:
(set-face-foreground viper-replace-overlay-face "DarkSlateBlue") (set-face-background viper-replace-overlay-face "yellow")
For a complete list of colors available to you, evaluate
the expression (x-defined-colors). (Type it in
the buffer *scratch* and then hit the
C-j key.
viper-replace-overlay-cursor-color "Red"Cursor color when it is inside the replacement region. This has effect only on color displays and only when Emacs runs as an X application.
viper-insert-state-cursor-color nilIf set to a valid color, this will be the cursor color when Viper is in insert state.
viper-emacs-state-cursor-color nilIf set to a valid color, this will be the cursor color when Viper is in emacs state.
viper-replace-region-end-delimiter "$"A string used to mark the end of replacement regions. It
is used only on TTYs or if
viper-use-replace-region-delimiters is
non-nil.
viper-replace-region-start-delimiter ""A string used to mark the beginning of replacement
regions. It is used only on TTYs or if
viper-use-replace-region-delimiters is
non-nil.
viper-use-replace-region-delimitersIf non-nil, Viper will always use
viper-replace-region-end-delimiter and
viper-replace-region-start-delimiter to delimit
replacement regions, even on color displays (where this is
unnecessary). By default, this variable is
non-nil only on TTYs or monochrome displays.
viper-allow-multiline-replace-regions tIf non-nil, multi-line text replacement
regions, such as those produced by commands c55w,
3C, etc., will stay around until the user exits
the replacement mode. In this variable is set to
nil, Viper will emulate the standard Vi
behavior, which supports only intra-line replacement regions
(and multi-line replacement regions are deleted).
viper-toggle-key "\C-z"Specifies the key used to switch from Emacs to Vi and back. Must be set in your Viper customization file. This variable can’t be changed interactively after Viper is loaded.
In Insert state, this key acts as a temporary escape to Vi state, i.e., it will set Viper up so that the very next command will be executed as if it were typed in Vi state.
viper-buffer-search-char nilKey used for buffer search. See Viper Specials, for details.
viper-surrounding-word-function
'viper-surrounding-wordThe value of this variable is a function name that is used to determine what constitutes a word clicked upon by the mouse. This is used by mouse search and insert.
viper-search-face 'viper-search-faceVariable that controls how search patterns are highlighted when they are found.
viper-vi-state-hook nilList of parameterless functions to be run just after entering the Vi command state.
viper-insert-state-hook nilSame for Insert state. This hook is also run after entering Replace state.
viper-replace-state-hook nilList of (parameterless) functions called just after
entering Replace state (and after all
viper-insert-state-hook).
viper-emacs-state-hook nilList of (parameterless) functions called just after switching from Vi state to Emacs state.
viper-load-hook nilList of (parameterless) functions called just after loading Viper. This is the last chance to do customization before Viper is up and running.
You can reset some of these constants in Viper with the Ex command :set (when so indicated in the table). Or you can include a line like this in your Viper customization file:
(setq viper-case-fold-search t)
Next: Key Bindings, Up: Customization [Contents][Index]